package com.cowmooed.properties;

import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.crypto.SecretKey;
import java.util.Base64;

/**
 * JWT配置属性类
 * 用于读取application.yml中的JWT相关配置
 */
@Data
@Component
@ConfigurationProperties(prefix = "jwt")
public class JwtProperties {
    
    /**
     * JWT密钥(Base64编码)
     * 使用固定密钥确保应用重启后令牌验证一致性
     * 符合RFC 7518, Section 3.2规范，密钥大小≥512 bits
     */
    private String secret = "VXNlIGEgU2VjdXJlIEtleSBDb21wbGV0ZWQgYnkgS2V5cy5zZWNyZXRLZXlmcm9tKFNpZ25hdHVyZUFsZ29yaXRobS5IUzUxMiki"; // 使用Keys.secretKeyFor生成的符合HS512要求的密钥
    
    /**
     * 获取安全的HS512密钥
     * 符合RFC 7518, Section 3.2规范，密钥大小>=512 bits
     */
    private String generateSecureSecret() {
        // 保留方法但返回固定密钥，确保兼容性
        return secret;
    }
    
    /**
     * JWT过期时间（秒）
     */
    private long expiration = 3600;
    
    /**
     * 令牌前缀
     */
    private String tokenPrefix = "Bearer ";
    
    /**
     * 请求头名称
     */
    private String header = "Authorization";
    
    /**
     * 刷新令牌过期时间（秒）
     */
    private long refreshExpiration = 86400;
}